// // index.js

// console.log('1: 同步代码开始 (Sync Code Start)');

// setTimeout(() => {
//   console.log('4: setTimeout - 在事件循环的下一个迭代的 timers 阶段执行');
// }, 0);

// setImmediate(() => {
//   console.log('5: setImmediate - 在事件循环的下一个迭代的 check 阶段执行');
// });

// process.nextTick(() => {
//   console.log('3: process.nextTick - 在当前操作结束后，事件循环迭代之前立即执行');
// });

// console.log('2: 同步代码结束 (Sync Code End)');

// // 1: 同步代码开始 (Sync Code Start)
// // 2: 同步代码结束 (Sync Code End)
// // 3: process.nextTick - 在当前操作结束后，事件循环迭代之前立即执行
// // 5: setImmediate - 在事件循环的下一个迭代的 check 阶段执行
// // 4: setTimeout - 在事件循环的下一个迭代的 timers 阶段执行

const sto = () => console.log("sto");
const imm = () => console.log("imm");
const nt1 = () => console.log("nt1");
const nt2 = () => console.log("nt2");
const start = () => {
  console.log("start");
  setTimeout(sto);
  setImmediate(imm);

  new Promise((resolve, reject) => {
    (async () => {
      console.log("promise");
      resolve("res");
    })();
  }).then((resolve) => {
    // microTask
    console.log(resolve);
    process.nextTick(nt2);
  });
  console.log("after then");
  // 下一次Loop 开始阶段
  process.nextTick(nt1);
};
start();

// start
// bar
// foo
// zoo
// baz
